{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# <center>超级码力笔试第一题</center>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div align=\"left\">\n",
    "    <img src=\"https://raw.githubusercontent.com/huber-yaoer/resume/master/01-%E8%B6%85%E7%BA%A7%E7%A0%81%E5%8A%9B%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AF%95/super1.png\"  alt=\"超级码力笔试第一题\" />\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 算法SVM，原理如下："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div align=\"left\">\n",
    "    <img src=\"https://raw.githubusercontent.com/huber-yaoer/resume/master/01-%E8%B6%85%E7%BA%A7%E7%A0%81%E5%8A%9B%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AF%95/SVM.png\"  alt=\"超级玛丽笔试第一题\" />\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 编程工具：python3 + scikit-learn中的SVC"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## SVC官方API文档: \n",
    "https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC\n",
    "\n",
    "## 关键参数总结如下：\n",
    "\n",
    "### 惩罚系数C：\n",
    "分类模型原型形式和对偶形式中的惩罚系数C，默认为1，一般需要通过交叉验证来选择一个合适的C。一般来说，如果噪音点较多时，C需要小一些。\n",
    "\n",
    "### 核函数 kernel：\n",
    "核函数有四种内置选择：‘linear’即线性核函数, ‘poly’即多项式核函数, ‘rbf’即高斯核函数, ‘sigmoid’即sigmoid核函数。默认是高斯核‘rbf’。\n",
    "\n",
    "还有一种选择为‘precomputed’,即我们预先计算出所有的训练集和测试集的样本对应的Gram矩阵，这样K(x,z)直接在对应的Gram矩阵中找对应的位置的值。\n",
    "\n",
    "### 核函数参数degree：\n",
    "如果我们在kernel参数使用了多项式核函数 'poly'，那么我们就需要对这个参数进行调参。这个参数对应K(x,z)=（γx∙z+r)d中的d。默认是3。一般需要通过交叉验证选择一组合适的γ,r,d\n",
    "\n",
    "### 核函数参数gamma ：\n",
    "如果我们在kernel参数使用了多项式核函数 'poly'，高斯核函数‘rbf’, 或者sigmoid核函数，那么我们就需要对这个参数进行调参。\n",
    "\n",
    "多项式核函数中这个参数对应K(x,z)=（γx∙z+r)d中的γ。一般需要通过交叉验证选择一组合适的γ,r,d \n",
    "\n",
    "高斯核函数中这个参数对应K(x,z)=exp(−γ||x−z||2)中的γ。一般需要通过交叉验证选择合适的γ\n",
    "sigmoid核函数中这个参数对应K(x,z)=tanh（γx∙z+r)中的γ。一般需要通过交叉验证选择一组合适的γ,r \n",
    "\n",
    "γ默认为'auto',即1特征维度\n",
    "\n",
    "###  核函数参数coef0：\n",
    "如果我们在kernel参数使用了多项式核函数 'poly'，或者sigmoid核函数，那么我们就需要对这个参数进行调参。\n",
    "\n",
    "多项式核函数中这个参数对应K(x,z)=（γx∙z+r)d中的r。一般需要通过交叉验证选择一组合适的γ,r,d \n",
    "\n",
    "sigmoid核函数中这个参数对应K(x,z)=tanh（γx∙z+r)中的r。一般需要通过交叉验证选择一组合适的γ,r \n",
    "\n",
    "coef0默认为0\n",
    "\n",
    "###  样本权重class_weight：\n",
    "指定样本各类别的的权重，主要是为了防止训练集某些类别的样本过多，导致训练的决策过于偏向这些类别。这里可以自己指定各个样本的权重，或者用“balanced”，如果使用“balanced”，则算法会自己计算权重，样本量少的类别所对应的样本权重会高。当然，如果你的样本类别分布没有明显的偏倚，则可以不管这个参数，选择默认的\"None\"\n",
    "\n",
    "### 分类决策decision_function_shape：\n",
    "可以选择'ovo'或者‘ovo’.\n",
    "\n",
    "### 缓存大小cache_size：\n",
    "在大样本的时候，缓存大小会影响训练速度，因此如果机器内存大，推荐用500MB甚至1000MB。默认是200，即200MB."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 我脑中的特征工程“决策树”： \n",
    "#### 看不清楚可下载后观看\n",
    "<div align=\"left\">\n",
    "    <img src=\"https://raw.githubusercontent.com/huber-yaoer/resume/master/01-%E8%B6%85%E7%BA%A7%E7%A0%81%E5%8A%9B%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AF%95/FeatureEngineering.png\"  alt=\"特征工程决策树\" />\n",
    "</div>\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 先对数据有个总体认知："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(20536, 62)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>...</th>\n",
       "      <th>52</th>\n",
       "      <th>53</th>\n",
       "      <th>54</th>\n",
       "      <th>55</th>\n",
       "      <th>56</th>\n",
       "      <th>57</th>\n",
       "      <th>58</th>\n",
       "      <th>59</th>\n",
       "      <th>60</th>\n",
       "      <th>y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.002690</td>\n",
       "      <td>0.002630</td>\n",
       "      <td>0.002743</td>\n",
       "      <td>0.002506</td>\n",
       "      <td>0.002737</td>\n",
       "      <td>0.002791</td>\n",
       "      <td>0.002590</td>\n",
       "      <td>0.002726</td>\n",
       "      <td>0.002484</td>\n",
       "      <td>0.002841</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000849</td>\n",
       "      <td>0.001611</td>\n",
       "      <td>-0.000375</td>\n",
       "      <td>-0.000097</td>\n",
       "      <td>0.000300</td>\n",
       "      <td>-0.000327</td>\n",
       "      <td>-0.000777</td>\n",
       "      <td>0.000558</td>\n",
       "      <td>-0.001546</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.002719</td>\n",
       "      <td>0.002617</td>\n",
       "      <td>0.002737</td>\n",
       "      <td>0.002715</td>\n",
       "      <td>0.002794</td>\n",
       "      <td>0.002601</td>\n",
       "      <td>0.002636</td>\n",
       "      <td>0.002523</td>\n",
       "      <td>0.002591</td>\n",
       "      <td>0.002842</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000300</td>\n",
       "      <td>-0.000327</td>\n",
       "      <td>-0.000777</td>\n",
       "      <td>0.000558</td>\n",
       "      <td>-0.001546</td>\n",
       "      <td>0.000802</td>\n",
       "      <td>-0.000707</td>\n",
       "      <td>-0.001041</td>\n",
       "      <td>0.001237</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.003065</td>\n",
       "      <td>0.002631</td>\n",
       "      <td>0.002710</td>\n",
       "      <td>0.002841</td>\n",
       "      <td>0.002624</td>\n",
       "      <td>0.002595</td>\n",
       "      <td>0.002575</td>\n",
       "      <td>0.002562</td>\n",
       "      <td>0.002568</td>\n",
       "      <td>0.002805</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.001546</td>\n",
       "      <td>0.000802</td>\n",
       "      <td>-0.000707</td>\n",
       "      <td>-0.001041</td>\n",
       "      <td>0.001237</td>\n",
       "      <td>0.000635</td>\n",
       "      <td>-0.001843</td>\n",
       "      <td>0.000294</td>\n",
       "      <td>0.004381</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.002838</td>\n",
       "      <td>0.002867</td>\n",
       "      <td>0.002596</td>\n",
       "      <td>0.002727</td>\n",
       "      <td>0.002702</td>\n",
       "      <td>0.002556</td>\n",
       "      <td>0.002524</td>\n",
       "      <td>0.002426</td>\n",
       "      <td>0.002515</td>\n",
       "      <td>0.002871</td>\n",
       "      <td>...</td>\n",
       "      <td>0.001237</td>\n",
       "      <td>0.000635</td>\n",
       "      <td>-0.001843</td>\n",
       "      <td>0.000294</td>\n",
       "      <td>0.004381</td>\n",
       "      <td>-0.002215</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>-0.000257</td>\n",
       "      <td>0.000111</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.002715</td>\n",
       "      <td>0.002743</td>\n",
       "      <td>0.002506</td>\n",
       "      <td>0.002737</td>\n",
       "      <td>0.002791</td>\n",
       "      <td>0.002590</td>\n",
       "      <td>0.002726</td>\n",
       "      <td>0.002484</td>\n",
       "      <td>0.002841</td>\n",
       "      <td>0.002876</td>\n",
       "      <td>...</td>\n",
       "      <td>0.004381</td>\n",
       "      <td>-0.002215</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>-0.000257</td>\n",
       "      <td>0.000111</td>\n",
       "      <td>-0.001733</td>\n",
       "      <td>0.000205</td>\n",
       "      <td>0.000983</td>\n",
       "      <td>-0.000687</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 62 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          0         1         2         3         4         5         6  \\\n",
       "0  0.002690  0.002630  0.002743  0.002506  0.002737  0.002791  0.002590   \n",
       "1  0.002719  0.002617  0.002737  0.002715  0.002794  0.002601  0.002636   \n",
       "2  0.003065  0.002631  0.002710  0.002841  0.002624  0.002595  0.002575   \n",
       "3  0.002838  0.002867  0.002596  0.002727  0.002702  0.002556  0.002524   \n",
       "4  0.002715  0.002743  0.002506  0.002737  0.002791  0.002590  0.002726   \n",
       "\n",
       "          7         8         9 ...        52        53        54        55  \\\n",
       "0  0.002726  0.002484  0.002841 ...  0.000849  0.001611 -0.000375 -0.000097   \n",
       "1  0.002523  0.002591  0.002842 ...  0.000300 -0.000327 -0.000777  0.000558   \n",
       "2  0.002562  0.002568  0.002805 ... -0.001546  0.000802 -0.000707 -0.001041   \n",
       "3  0.002426  0.002515  0.002871 ...  0.001237  0.000635 -0.001843  0.000294   \n",
       "4  0.002484  0.002841  0.002876 ...  0.004381 -0.002215  0.000085 -0.000257   \n",
       "\n",
       "         56        57        58        59        60  y  \n",
       "0  0.000300 -0.000327 -0.000777  0.000558 -0.001546  0  \n",
       "1 -0.001546  0.000802 -0.000707 -0.001041  0.001237  0  \n",
       "2  0.001237  0.000635 -0.001843  0.000294  0.004381  0  \n",
       "3  0.004381 -0.002215  0.000085 -0.000257  0.000111  0  \n",
       "4  0.000111 -0.001733  0.000205  0.000983 -0.000687  0  \n",
       "\n",
       "[5 rows x 62 columns]"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "X = pd.read_csv('./Test1_features.csv',header=None,sep=',') \n",
    "y = pd.read_csv('./Test1_labels.csv',header=None,sep=',')\n",
    "df = X.copy()\n",
    "df['y'] = y\n",
    "print(df.shape)\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 考虑到SVM只用支持向量优化模型参数，所以SVM对异常数据不敏感，也就不需要处理异常数据了。\n",
    "#### 来简单看一下各特征数据分布情况吧"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>...</th>\n",
       "      <th>52</th>\n",
       "      <th>53</th>\n",
       "      <th>54</th>\n",
       "      <th>55</th>\n",
       "      <th>56</th>\n",
       "      <th>57</th>\n",
       "      <th>58</th>\n",
       "      <th>59</th>\n",
       "      <th>60</th>\n",
       "      <th>y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>20536.000000</td>\n",
       "      <td>20536.000000</td>\n",
       "      <td>20536.000000</td>\n",
       "      <td>20536.000000</td>\n",
       "      <td>20536.000000</td>\n",
       "      <td>20536.000000</td>\n",
       "      <td>20536.000000</td>\n",
       "      <td>20536.000000</td>\n",
       "      <td>20536.000000</td>\n",
       "      <td>20536.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>20536.000000</td>\n",
       "      <td>20536.000000</td>\n",
       "      <td>20536.000000</td>\n",
       "      <td>20536.000000</td>\n",
       "      <td>20536.000000</td>\n",
       "      <td>20536.000000</td>\n",
       "      <td>20536.000000</td>\n",
       "      <td>20536.000000</td>\n",
       "      <td>20536.000000</td>\n",
       "      <td>20536.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>0.280840</td>\n",
       "      <td>0.191621</td>\n",
       "      <td>0.200414</td>\n",
       "      <td>0.209932</td>\n",
       "      <td>0.219502</td>\n",
       "      <td>0.228368</td>\n",
       "      <td>0.235957</td>\n",
       "      <td>0.243107</td>\n",
       "      <td>0.249982</td>\n",
       "      <td>0.256800</td>\n",
       "      <td>...</td>\n",
       "      <td>0.005001</td>\n",
       "      <td>0.006774</td>\n",
       "      <td>0.010448</td>\n",
       "      <td>0.004722</td>\n",
       "      <td>0.006377</td>\n",
       "      <td>0.006961</td>\n",
       "      <td>0.012285</td>\n",
       "      <td>0.022152</td>\n",
       "      <td>0.046366</td>\n",
       "      <td>0.609223</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.329204</td>\n",
       "      <td>0.204646</td>\n",
       "      <td>0.207465</td>\n",
       "      <td>0.210597</td>\n",
       "      <td>0.213606</td>\n",
       "      <td>0.215833</td>\n",
       "      <td>0.216641</td>\n",
       "      <td>0.217807</td>\n",
       "      <td>0.219981</td>\n",
       "      <td>0.222512</td>\n",
       "      <td>...</td>\n",
       "      <td>0.203977</td>\n",
       "      <td>0.189287</td>\n",
       "      <td>0.222141</td>\n",
       "      <td>0.215072</td>\n",
       "      <td>0.221367</td>\n",
       "      <td>0.208717</td>\n",
       "      <td>0.236225</td>\n",
       "      <td>1.201108</td>\n",
       "      <td>2.009693</td>\n",
       "      <td>0.487936</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.002174</td>\n",
       "      <td>0.000525</td>\n",
       "      <td>0.000525</td>\n",
       "      <td>0.000540</td>\n",
       "      <td>0.000540</td>\n",
       "      <td>0.000532</td>\n",
       "      <td>0.000532</td>\n",
       "      <td>0.000541</td>\n",
       "      <td>0.000541</td>\n",
       "      <td>0.002174</td>\n",
       "      <td>...</td>\n",
       "      <td>-10.540000</td>\n",
       "      <td>-4.977000</td>\n",
       "      <td>-3.973000</td>\n",
       "      <td>-6.945700</td>\n",
       "      <td>-10.540000</td>\n",
       "      <td>-9.132000</td>\n",
       "      <td>-3.973000</td>\n",
       "      <td>-6.945700</td>\n",
       "      <td>-56.062000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>0.099018</td>\n",
       "      <td>0.040698</td>\n",
       "      <td>0.048296</td>\n",
       "      <td>0.055678</td>\n",
       "      <td>0.063409</td>\n",
       "      <td>0.071543</td>\n",
       "      <td>0.077776</td>\n",
       "      <td>0.082595</td>\n",
       "      <td>0.087183</td>\n",
       "      <td>0.091128</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.011992</td>\n",
       "      <td>-0.012900</td>\n",
       "      <td>-0.012500</td>\n",
       "      <td>-0.012700</td>\n",
       "      <td>-0.012200</td>\n",
       "      <td>-0.013100</td>\n",
       "      <td>-0.012700</td>\n",
       "      <td>-0.012830</td>\n",
       "      <td>-0.012253</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>0.208715</td>\n",
       "      <td>0.123425</td>\n",
       "      <td>0.132115</td>\n",
       "      <td>0.141230</td>\n",
       "      <td>0.152040</td>\n",
       "      <td>0.162100</td>\n",
       "      <td>0.171015</td>\n",
       "      <td>0.179435</td>\n",
       "      <td>0.187105</td>\n",
       "      <td>0.194050</td>\n",
       "      <td>...</td>\n",
       "      <td>0.002100</td>\n",
       "      <td>0.002060</td>\n",
       "      <td>0.002120</td>\n",
       "      <td>0.002120</td>\n",
       "      <td>0.002100</td>\n",
       "      <td>0.002060</td>\n",
       "      <td>0.002120</td>\n",
       "      <td>0.002130</td>\n",
       "      <td>0.002110</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>0.389085</td>\n",
       "      <td>0.269215</td>\n",
       "      <td>0.282680</td>\n",
       "      <td>0.293893</td>\n",
       "      <td>0.306603</td>\n",
       "      <td>0.318300</td>\n",
       "      <td>0.328265</td>\n",
       "      <td>0.339680</td>\n",
       "      <td>0.350170</td>\n",
       "      <td>0.360803</td>\n",
       "      <td>...</td>\n",
       "      <td>0.018302</td>\n",
       "      <td>0.018200</td>\n",
       "      <td>0.018377</td>\n",
       "      <td>0.018625</td>\n",
       "      <td>0.018600</td>\n",
       "      <td>0.018600</td>\n",
       "      <td>0.018700</td>\n",
       "      <td>0.019200</td>\n",
       "      <td>0.019100</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>10.526000</td>\n",
       "      <td>1.594900</td>\n",
       "      <td>1.594900</td>\n",
       "      <td>1.594900</td>\n",
       "      <td>1.594900</td>\n",
       "      <td>1.594900</td>\n",
       "      <td>1.594900</td>\n",
       "      <td>1.594900</td>\n",
       "      <td>1.756800</td>\n",
       "      <td>1.756800</td>\n",
       "      <td>...</td>\n",
       "      <td>6.523700</td>\n",
       "      <td>4.685600</td>\n",
       "      <td>13.894000</td>\n",
       "      <td>6.911100</td>\n",
       "      <td>6.757000</td>\n",
       "      <td>4.685600</td>\n",
       "      <td>13.894000</td>\n",
       "      <td>101.300000</td>\n",
       "      <td>99.892000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>8 rows × 62 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                  0             1             2             3             4  \\\n",
       "count  20536.000000  20536.000000  20536.000000  20536.000000  20536.000000   \n",
       "mean       0.280840      0.191621      0.200414      0.209932      0.219502   \n",
       "std        0.329204      0.204646      0.207465      0.210597      0.213606   \n",
       "min        0.002174      0.000525      0.000525      0.000540      0.000540   \n",
       "25%        0.099018      0.040698      0.048296      0.055678      0.063409   \n",
       "50%        0.208715      0.123425      0.132115      0.141230      0.152040   \n",
       "75%        0.389085      0.269215      0.282680      0.293893      0.306603   \n",
       "max       10.526000      1.594900      1.594900      1.594900      1.594900   \n",
       "\n",
       "                  5             6             7             8             9  \\\n",
       "count  20536.000000  20536.000000  20536.000000  20536.000000  20536.000000   \n",
       "mean       0.228368      0.235957      0.243107      0.249982      0.256800   \n",
       "std        0.215833      0.216641      0.217807      0.219981      0.222512   \n",
       "min        0.000532      0.000532      0.000541      0.000541      0.002174   \n",
       "25%        0.071543      0.077776      0.082595      0.087183      0.091128   \n",
       "50%        0.162100      0.171015      0.179435      0.187105      0.194050   \n",
       "75%        0.318300      0.328265      0.339680      0.350170      0.360803   \n",
       "max        1.594900      1.594900      1.594900      1.756800      1.756800   \n",
       "\n",
       "           ...                 52            53            54            55  \\\n",
       "count      ...       20536.000000  20536.000000  20536.000000  20536.000000   \n",
       "mean       ...           0.005001      0.006774      0.010448      0.004722   \n",
       "std        ...           0.203977      0.189287      0.222141      0.215072   \n",
       "min        ...         -10.540000     -4.977000     -3.973000     -6.945700   \n",
       "25%        ...          -0.011992     -0.012900     -0.012500     -0.012700   \n",
       "50%        ...           0.002100      0.002060      0.002120      0.002120   \n",
       "75%        ...           0.018302      0.018200      0.018377      0.018625   \n",
       "max        ...           6.523700      4.685600     13.894000      6.911100   \n",
       "\n",
       "                 56            57            58            59            60  \\\n",
       "count  20536.000000  20536.000000  20536.000000  20536.000000  20536.000000   \n",
       "mean       0.006377      0.006961      0.012285      0.022152      0.046366   \n",
       "std        0.221367      0.208717      0.236225      1.201108      2.009693   \n",
       "min      -10.540000     -9.132000     -3.973000     -6.945700    -56.062000   \n",
       "25%       -0.012200     -0.013100     -0.012700     -0.012830     -0.012253   \n",
       "50%        0.002100      0.002060      0.002120      0.002130      0.002110   \n",
       "75%        0.018600      0.018600      0.018700      0.019200      0.019100   \n",
       "max        6.757000      4.685600     13.894000    101.300000     99.892000   \n",
       "\n",
       "                  y  \n",
       "count  20536.000000  \n",
       "mean       0.609223  \n",
       "std        0.487936  \n",
       "min        0.000000  \n",
       "25%        0.000000  \n",
       "50%        1.000000  \n",
       "75%        1.000000  \n",
       "max        1.000000  \n",
       "\n",
       "[8 rows x 62 columns]"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 重点看一下标签有几种分类："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0\n",
      "0     8025\n",
      "1    12511\n",
      "Name: 0, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "print(y[0].groupby(y[0]).count())#df.groupby('y').agg(np.size)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 可以看出这是个二分类任务，样本分布不是特别不均衡"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 判断是否有缺失值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "False\n"
     ]
    }
   ],
   "source": [
    "#df.iloc[1:3,1] = np.nan\n",
    "print(True in df.isnull().any().tolist())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### OK！ 没有缺失值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 看看各特征之间及与标签的皮尔逊相关系数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "54    0.000168\n",
       "20    0.003330\n",
       "58    0.005743\n",
       "59    0.007475\n",
       "14    0.013870\n",
       "60    0.014105\n",
       "13    0.014829\n",
       "40    0.015805\n",
       "56    0.016234\n",
       "57    0.016318\n",
       "53    0.018614\n",
       "52    0.022497\n",
       "55    0.022665\n",
       "51    0.024020\n",
       "12    0.032626\n",
       "39    0.033384\n",
       "15    0.042317\n",
       "11    0.042452\n",
       "38    0.046479\n",
       "37    0.052567\n",
       "36    0.056766\n",
       "16    0.059311\n",
       "31    0.060541\n",
       "33    0.062013\n",
       "34    0.062194\n",
       "35    0.062486\n",
       "32    0.063182\n",
       "17    0.080610\n",
       "18    0.101672\n",
       "19    0.105842\n",
       "        ...   \n",
       "49    0.352208\n",
       "48    0.355292\n",
       "47    0.357948\n",
       "30    0.357948\n",
       "46    0.359954\n",
       "45    0.362663\n",
       "44    0.365954\n",
       "43    0.368877\n",
       "29    0.368877\n",
       "42    0.370569\n",
       "41    0.373473\n",
       "28    0.379326\n",
       "27    0.389608\n",
       "10    0.389608\n",
       "26    0.399757\n",
       "25    0.409718\n",
       "24    0.419493\n",
       "23    0.428930\n",
       "9     0.428930\n",
       "22    0.437770\n",
       "21    0.446120\n",
       "8     0.461869\n",
       "7     0.487896\n",
       "6     0.505882\n",
       "5     0.518734\n",
       "4     0.527799\n",
       "1     0.528909\n",
       "2     0.531468\n",
       "3     0.531512\n",
       "y     1.000000\n",
       "Name: y, Length: 62, dtype: float64"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.corr(method ='pearson',min_periods = 1)['y'].abs().sort_values()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0xd48a2e8>"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x576 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as pl\n",
    "import seaborn as sns\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')\n",
    "pl.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签\n",
    "pl.rcParams['axes.unicode_minus']=False #用来正常显示负号\n",
    "f, ax = pl.subplots(figsize=(10, 8))\n",
    "corr = df.corr(method ='pearson',min_periods = 1).abs()\n",
    "sns.heatmap(corr, mask=np.zeros_like(corr, dtype=np.bool), cmap=sns.diverging_palette(240,10,as_cmap=True),\n",
    "            square=True, ax=ax)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 可以发现有很多特征互相强相关，而且互相强相关的特征也和输出强相关。\n",
    "#### 可以试着做两件事：\n",
    "#####       1.特征选择：利用末尾淘汰制，一个一个的减小权重最小的特征，直到减少一个特征后指标有明显下降，即手肘法\n",
    "#####       2.降维：PCA、LDA"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 先不着急做特征选择和降维，先所有特征一股脑儿加入炼丹炉，也许还不错呢。。。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0     float64\n",
       "1     float64\n",
       "2     float64\n",
       "3     float64\n",
       "4     float64\n",
       "5     float64\n",
       "6     float64\n",
       "7     float64\n",
       "8     float64\n",
       "9     float64\n",
       "10    float64\n",
       "11    float64\n",
       "12    float64\n",
       "13    float64\n",
       "14    float64\n",
       "15    float64\n",
       "16    float64\n",
       "17    float64\n",
       "18    float64\n",
       "19    float64\n",
       "20    float64\n",
       "21    float64\n",
       "22    float64\n",
       "23    float64\n",
       "24    float64\n",
       "25    float64\n",
       "26    float64\n",
       "27    float64\n",
       "28    float64\n",
       "29    float64\n",
       "       ...   \n",
       "32    float64\n",
       "33    float64\n",
       "34    float64\n",
       "35    float64\n",
       "36    float64\n",
       "37    float64\n",
       "38    float64\n",
       "39    float64\n",
       "40    float64\n",
       "41    float64\n",
       "42    float64\n",
       "43    float64\n",
       "44    float64\n",
       "45    float64\n",
       "46    float64\n",
       "47    float64\n",
       "48    float64\n",
       "49    float64\n",
       "50    float64\n",
       "51    float64\n",
       "52    float64\n",
       "53    float64\n",
       "54    float64\n",
       "55    float64\n",
       "56    float64\n",
       "57    float64\n",
       "58    float64\n",
       "59    float64\n",
       "60    float64\n",
       "y       int64\n",
       "Length: 62, dtype: object"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.dtypes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 看特征数据基本都是float64，为了加快SVM优化速度，对数据做z-score标准化：（x-mean)/std，均值0，方差1\n",
    "关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化：https://www.cnblogs.com/qqhfeng/p/5294767.html\n",
    "API详解sklearn.preprocessing.StandardScaler：https://blog.csdn.net/weixin_39175124/article/details/79463993\n",
    "##### 注意：如果要对数据做PCA降维，千万不能变方差，只需中心化即可，即均值0，方差不变"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>...</th>\n",
       "      <th>51</th>\n",
       "      <th>52</th>\n",
       "      <th>53</th>\n",
       "      <th>54</th>\n",
       "      <th>55</th>\n",
       "      <th>56</th>\n",
       "      <th>57</th>\n",
       "      <th>58</th>\n",
       "      <th>59</th>\n",
       "      <th>60</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>2.053600e+04</td>\n",
       "      <td>2.053600e+04</td>\n",
       "      <td>2.053600e+04</td>\n",
       "      <td>2.053600e+04</td>\n",
       "      <td>2.053600e+04</td>\n",
       "      <td>2.053600e+04</td>\n",
       "      <td>2.053600e+04</td>\n",
       "      <td>2.053600e+04</td>\n",
       "      <td>2.053600e+04</td>\n",
       "      <td>2.053600e+04</td>\n",
       "      <td>...</td>\n",
       "      <td>2.053600e+04</td>\n",
       "      <td>2.053600e+04</td>\n",
       "      <td>2.053600e+04</td>\n",
       "      <td>2.053600e+04</td>\n",
       "      <td>2.053600e+04</td>\n",
       "      <td>2.053600e+04</td>\n",
       "      <td>2.053600e+04</td>\n",
       "      <td>2.053600e+04</td>\n",
       "      <td>2.053600e+04</td>\n",
       "      <td>2.053600e+04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>-6.126338e-17</td>\n",
       "      <td>2.116863e-16</td>\n",
       "      <td>-4.391155e-16</td>\n",
       "      <td>-2.627643e-16</td>\n",
       "      <td>-9.644711e-18</td>\n",
       "      <td>-1.991871e-16</td>\n",
       "      <td>4.748831e-16</td>\n",
       "      <td>-2.224122e-16</td>\n",
       "      <td>5.461804e-16</td>\n",
       "      <td>4.632273e-16</td>\n",
       "      <td>...</td>\n",
       "      <td>2.838270e-18</td>\n",
       "      <td>-3.143029e-17</td>\n",
       "      <td>6.487474e-18</td>\n",
       "      <td>-3.317262e-17</td>\n",
       "      <td>8.931089e-18</td>\n",
       "      <td>2.184116e-17</td>\n",
       "      <td>-3.248062e-17</td>\n",
       "      <td>1.459465e-16</td>\n",
       "      <td>1.167745e-18</td>\n",
       "      <td>2.388472e-17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>1.000024e+00</td>\n",
       "      <td>1.000024e+00</td>\n",
       "      <td>1.000024e+00</td>\n",
       "      <td>1.000024e+00</td>\n",
       "      <td>1.000024e+00</td>\n",
       "      <td>1.000024e+00</td>\n",
       "      <td>1.000024e+00</td>\n",
       "      <td>1.000024e+00</td>\n",
       "      <td>1.000024e+00</td>\n",
       "      <td>1.000024e+00</td>\n",
       "      <td>...</td>\n",
       "      <td>1.000024e+00</td>\n",
       "      <td>1.000024e+00</td>\n",
       "      <td>1.000024e+00</td>\n",
       "      <td>1.000024e+00</td>\n",
       "      <td>1.000024e+00</td>\n",
       "      <td>1.000024e+00</td>\n",
       "      <td>1.000024e+00</td>\n",
       "      <td>1.000024e+00</td>\n",
       "      <td>1.000024e+00</td>\n",
       "      <td>1.000024e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-8.465050e-01</td>\n",
       "      <td>-9.338106e-01</td>\n",
       "      <td>-9.635063e-01</td>\n",
       "      <td>-9.943032e-01</td>\n",
       "      <td>-1.025096e+00</td>\n",
       "      <td>-1.055641e+00</td>\n",
       "      <td>-1.086734e+00</td>\n",
       "      <td>-1.113702e+00</td>\n",
       "      <td>-1.133950e+00</td>\n",
       "      <td>-1.144353e+00</td>\n",
       "      <td>...</td>\n",
       "      <td>-3.360442e+01</td>\n",
       "      <td>-5.169834e+01</td>\n",
       "      <td>-2.632977e+01</td>\n",
       "      <td>-1.793251e+01</td>\n",
       "      <td>-3.231747e+01</td>\n",
       "      <td>-4.764322e+01</td>\n",
       "      <td>-4.378743e+01</td>\n",
       "      <td>-1.687116e+01</td>\n",
       "      <td>-5.801328e+00</td>\n",
       "      <td>-2.791955e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-5.523220e-01</td>\n",
       "      <td>-7.375030e-01</td>\n",
       "      <td>-7.332436e-01</td>\n",
       "      <td>-7.324793e-01</td>\n",
       "      <td>-7.307699e-01</td>\n",
       "      <td>-7.266231e-01</td>\n",
       "      <td>-7.301692e-01</td>\n",
       "      <td>-7.369659e-01</td>\n",
       "      <td>-7.400812e-01</td>\n",
       "      <td>-7.445717e-01</td>\n",
       "      <td>...</td>\n",
       "      <td>-8.186860e-02</td>\n",
       "      <td>-8.331240e-02</td>\n",
       "      <td>-1.039413e-01</td>\n",
       "      <td>-1.033056e-01</td>\n",
       "      <td>-8.100783e-02</td>\n",
       "      <td>-8.392344e-02</td>\n",
       "      <td>-9.611693e-02</td>\n",
       "      <td>-1.057714e-01</td>\n",
       "      <td>-2.912538e-02</td>\n",
       "      <td>-2.916854e-02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>-2.190955e-01</td>\n",
       "      <td>-3.332482e-01</td>\n",
       "      <td>-3.292173e-01</td>\n",
       "      <td>-3.262345e-01</td>\n",
       "      <td>-3.158310e-01</td>\n",
       "      <td>-3.070429e-01</td>\n",
       "      <td>-2.997766e-01</td>\n",
       "      <td>-2.923413e-01</td>\n",
       "      <td>-2.858381e-01</td>\n",
       "      <td>-2.820143e-01</td>\n",
       "      <td>...</td>\n",
       "      <td>-1.195502e-02</td>\n",
       "      <td>-1.422195e-02</td>\n",
       "      <td>-2.490611e-02</td>\n",
       "      <td>-3.748993e-02</td>\n",
       "      <td>-1.209908e-02</td>\n",
       "      <td>-1.932324e-02</td>\n",
       "      <td>-2.348094e-02</td>\n",
       "      <td>-4.303293e-02</td>\n",
       "      <td>-1.666991e-02</td>\n",
       "      <td>-2.202175e-02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>3.288144e-01</td>\n",
       "      <td>3.791712e-01</td>\n",
       "      <td>3.965373e-01</td>\n",
       "      <td>3.986875e-01</td>\n",
       "      <td>4.077737e-01</td>\n",
       "      <td>4.166828e-01</td>\n",
       "      <td>4.260957e-01</td>\n",
       "      <td>4.433967e-01</td>\n",
       "      <td>4.554499e-01</td>\n",
       "      <td>4.674135e-01</td>\n",
       "      <td>...</td>\n",
       "      <td>6.675820e-02</td>\n",
       "      <td>6.521307e-02</td>\n",
       "      <td>6.036312e-02</td>\n",
       "      <td>3.569738e-02</td>\n",
       "      <td>6.464443e-02</td>\n",
       "      <td>5.521545e-02</td>\n",
       "      <td>5.576704e-02</td>\n",
       "      <td>2.715622e-02</td>\n",
       "      <td>-2.457692e-03</td>\n",
       "      <td>-1.356752e-02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>3.112172e+01</td>\n",
       "      <td>6.857281e+00</td>\n",
       "      <td>6.721711e+00</td>\n",
       "      <td>6.576557e+00</td>\n",
       "      <td>6.439108e+00</td>\n",
       "      <td>6.331588e+00</td>\n",
       "      <td>6.272933e+00</td>\n",
       "      <td>6.206528e+00</td>\n",
       "      <td>6.849942e+00</td>\n",
       "      <td>6.741378e+00</td>\n",
       "      <td>...</td>\n",
       "      <td>3.339272e+01</td>\n",
       "      <td>3.195883e+01</td>\n",
       "      <td>2.471870e+01</td>\n",
       "      <td>6.250037e+01</td>\n",
       "      <td>3.211267e+01</td>\n",
       "      <td>3.049591e+01</td>\n",
       "      <td>2.241673e+01</td>\n",
       "      <td>5.876633e+01</td>\n",
       "      <td>8.432240e+01</td>\n",
       "      <td>4.968324e+01</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>8 rows × 61 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                 0             1             2             3             4   \\\n",
       "count  2.053600e+04  2.053600e+04  2.053600e+04  2.053600e+04  2.053600e+04   \n",
       "mean  -6.126338e-17  2.116863e-16 -4.391155e-16 -2.627643e-16 -9.644711e-18   \n",
       "std    1.000024e+00  1.000024e+00  1.000024e+00  1.000024e+00  1.000024e+00   \n",
       "min   -8.465050e-01 -9.338106e-01 -9.635063e-01 -9.943032e-01 -1.025096e+00   \n",
       "25%   -5.523220e-01 -7.375030e-01 -7.332436e-01 -7.324793e-01 -7.307699e-01   \n",
       "50%   -2.190955e-01 -3.332482e-01 -3.292173e-01 -3.262345e-01 -3.158310e-01   \n",
       "75%    3.288144e-01  3.791712e-01  3.965373e-01  3.986875e-01  4.077737e-01   \n",
       "max    3.112172e+01  6.857281e+00  6.721711e+00  6.576557e+00  6.439108e+00   \n",
       "\n",
       "                 5             6             7             8             9   \\\n",
       "count  2.053600e+04  2.053600e+04  2.053600e+04  2.053600e+04  2.053600e+04   \n",
       "mean  -1.991871e-16  4.748831e-16 -2.224122e-16  5.461804e-16  4.632273e-16   \n",
       "std    1.000024e+00  1.000024e+00  1.000024e+00  1.000024e+00  1.000024e+00   \n",
       "min   -1.055641e+00 -1.086734e+00 -1.113702e+00 -1.133950e+00 -1.144353e+00   \n",
       "25%   -7.266231e-01 -7.301692e-01 -7.369659e-01 -7.400812e-01 -7.445717e-01   \n",
       "50%   -3.070429e-01 -2.997766e-01 -2.923413e-01 -2.858381e-01 -2.820143e-01   \n",
       "75%    4.166828e-01  4.260957e-01  4.433967e-01  4.554499e-01  4.674135e-01   \n",
       "max    6.331588e+00  6.272933e+00  6.206528e+00  6.849942e+00  6.741378e+00   \n",
       "\n",
       "           ...                 51            52            53            54  \\\n",
       "count      ...       2.053600e+04  2.053600e+04  2.053600e+04  2.053600e+04   \n",
       "mean       ...       2.838270e-18 -3.143029e-17  6.487474e-18 -3.317262e-17   \n",
       "std        ...       1.000024e+00  1.000024e+00  1.000024e+00  1.000024e+00   \n",
       "min        ...      -3.360442e+01 -5.169834e+01 -2.632977e+01 -1.793251e+01   \n",
       "25%        ...      -8.186860e-02 -8.331240e-02 -1.039413e-01 -1.033056e-01   \n",
       "50%        ...      -1.195502e-02 -1.422195e-02 -2.490611e-02 -3.748993e-02   \n",
       "75%        ...       6.675820e-02  6.521307e-02  6.036312e-02  3.569738e-02   \n",
       "max        ...       3.339272e+01  3.195883e+01  2.471870e+01  6.250037e+01   \n",
       "\n",
       "                 55            56            57            58            59  \\\n",
       "count  2.053600e+04  2.053600e+04  2.053600e+04  2.053600e+04  2.053600e+04   \n",
       "mean   8.931089e-18  2.184116e-17 -3.248062e-17  1.459465e-16  1.167745e-18   \n",
       "std    1.000024e+00  1.000024e+00  1.000024e+00  1.000024e+00  1.000024e+00   \n",
       "min   -3.231747e+01 -4.764322e+01 -4.378743e+01 -1.687116e+01 -5.801328e+00   \n",
       "25%   -8.100783e-02 -8.392344e-02 -9.611693e-02 -1.057714e-01 -2.912538e-02   \n",
       "50%   -1.209908e-02 -1.932324e-02 -2.348094e-02 -4.303293e-02 -1.666991e-02   \n",
       "75%    6.464443e-02  5.521545e-02  5.576704e-02  2.715622e-02 -2.457692e-03   \n",
       "max    3.211267e+01  3.049591e+01  2.241673e+01  5.876633e+01  8.432240e+01   \n",
       "\n",
       "                 60  \n",
       "count  2.053600e+04  \n",
       "mean   2.388472e-17  \n",
       "std    1.000024e+00  \n",
       "min   -2.791955e+01  \n",
       "25%   -2.916854e-02  \n",
       "50%   -2.202175e-02  \n",
       "75%   -1.356752e-02  \n",
       "max    4.968324e+01  \n",
       "\n",
       "[8 rows x 61 columns]"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn import preprocessing\n",
    "z_score = preprocessing.StandardScaler().fit(X)\n",
    "# print(z_score.n_samples_seen_ )\n",
    "# print(z_score.mean_)\n",
    "# print(z_score.var_)\n",
    "# print(z_score.scale_)\n",
    "x_normalization=z_score.fit_transform(X)\n",
    "x_normalization = pd.DataFrame(x_normalization)\n",
    "x_normalization.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0xaef5b70>"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pl.figure(figsize=(12,5))\n",
    "pl.title(u\"各特征标准化归一化后箱型图，各特征分布情况一目了然\")\n",
    "sns.boxplot(data =  x_normalization , orient=\"h\", palette = 'rainbow')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 分割数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [],
   "source": [
    "from __future__ import print_function\n",
    "\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.metrics import classification_report\n",
    "from sklearn.svm import SVC\n",
    "\n",
    "# Split the dataset in two equal parts\n",
    "X_train, X_test, y_train, y_test = train_test_split(\n",
    "    X, y, test_size=0.7, random_state=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 看一下分割为训练集70%，测试集30%后的数据分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0\n",
      "0    2378\n",
      "1    3782\n",
      "Name: 0, dtype: int64\n",
      "0\n",
      "0    5647\n",
      "1    8729\n",
      "Name: 0, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "print(y_train[0].groupby(y_train[0]).count())\n",
    "print(y_test[0].groupby(y_test[0]).count())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 分布正常，接下来设置超参数范围，进行交叉验证\n",
    "###### 使用交叉验证的网格搜索进行参数估计官方例子： \n",
    "https://scikit-learn.org/stable/auto_examples/model_selection/plot_grid_search_digits.html#sphx-glr-auto-examples-model-selection-plot-grid-search-digits-py\n",
    "###### 网格搜索交叉验证官方API文档: \n",
    "https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html#sklearn.model_selection.GridSearchCV\n",
    "###### sklearn.metrics.f1_score :\n",
    "https://scikit-learn.org/stable/modules/generated/sklearn.metrics.f1_score.html#sklearn.metrics.f1_score \n",
    "###### 模型评估指标总结：\n",
    "https://www.cnblogs.com/pinard/p/5993450.html \n",
    "###### 模型评估指标官网总结:\n",
    "https://scikit-learn.org/stable/modules/model_evaluation.html"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "# Tuning hyper-parameters for f1\n",
      "\n",
      "Best parameters set found on development set:\n",
      "\n",
      "{'C': 3000, 'gamma': 2.1, 'kernel': 'rbf'}\n",
      "\n",
      "Grid scores on development set:\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detailed classification report:\n",
      "\n",
      "The model is trained on the full development set.\n",
      "The scores are computed on the full evaluation set.\n",
      "\n",
      "             precision    recall  f1-score   support\n",
      "\n",
      "          0       0.96      0.96      0.96      5647\n",
      "          1       0.97      0.97      0.97      8729\n",
      "\n",
      "avg / total       0.97      0.97      0.97     14376\n",
      "\n",
      "\n"
     ]
    }
   ],
   "source": [
    "#设置超参数范围\n",
    "#第一次对于'f1', 'roc_auc'，最好的参数都是{'C': 1000, 'gamma': 0.001, 'kernel': 'rbf'} 5折\n",
    "# tuned_parameters = [{'kernel': ['rbf'], 'gamma': [1e-3, 1e-4],\n",
    "#                      'C': [1, 10, 100, 1000]},\n",
    "#                     {'kernel': ['linear'], 'C': [1, 10, 100, 1000]}]\n",
    "# scores = ['f1', 'roc_auc']\n",
    "\n",
    "\n",
    "\n",
    "#核函数确定为高斯核，判定标准确定为'f1'，电脑性能有限，以后再细致的调参。\n",
    "#第二次最好参数是{'C': 1000, 'gamma': 0.01, 'kernel': 'rbf'} 3折\n",
    "# tuned_parameters = [{'kernel': ['rbf'], \n",
    "#                      'gamma': [0.01,0.005,0.001, 0.0005],\n",
    "#                      'C': [1, 10, 100, 1000]},\n",
    "#                     ]\n",
    "# score = 'f1'\n",
    "\n",
    "\n",
    "# #第三次最好参数是{'C': 1000, 'gamma': 0.05, 'kernel': 'rbf'} 3折\n",
    "# tuned_parameters = [{'kernel': ['rbf'], \n",
    "#                      'gamma': [0.05,0.02,0.01, 0.005],\n",
    "#                      'C': [ 700, 1000, 5000, 10000]},\n",
    "#                     ]\n",
    "# score = 'f1'\n",
    "\n",
    "# #第四次最好参数是{'C': 10000, 'gamma': 0.3, 'kernel': 'rbf'} 3折 4*4=16\n",
    "# tuned_parameters = [{'kernel': ['rbf'], \n",
    "#                      'gamma': [0.3,0.2,0.1, 0.05],\n",
    "#                      'C': [ 10000, 20000, 30000, 40000]},\n",
    "#                     ]\n",
    "# score = 'f1'\n",
    "\n",
    "\n",
    "# #第五次最好参数是{'C': 7000, 'gamma': 1.9, 'kernel': 'rbf'} 3折\n",
    "#从早10点到晚6点都没跑完。。。。。。。40*90=3600 确实太多,以后注意采集一轮所需时间,更合理安排自己任务\n",
    "#放弃\n",
    "# tuned_parameters = [{'kernel': ['rbf'], \n",
    "#                      'gamma': np.arange(0.1, 8, 0.2),\n",
    "#                      'C': np.arange(1000, 10000, 100)},\n",
    "#                     ]\n",
    "# score = 'f1'\n",
    "\n",
    "# #第五次最好参数是{'C': 7000, 'gamma': 1.9, 'kernel': 'rbf'} 3折\n",
    "# 8*7 = 56\n",
    "tuned_parameters = [{'kernel': ['rbf'], \n",
    "                     'gamma': np.arange(0.1, 4, 0.5),\n",
    "                     'C': np.arange(1000, 15000, 2000)},\n",
    "                    ]\n",
    "\n",
    "score = 'f1'\n",
    "\n",
    "\n",
    "print(\"# Tuning hyper-parameters for %s\" % score)\n",
    "print()\n",
    "\n",
    "clf = GridSearchCV(SVC(), tuned_parameters, cv=3,\n",
    "            scoring='%s' % score)\n",
    "clf.fit(X_train, y_train)\n",
    "\n",
    "print(\"Best parameters set found on development set:\")\n",
    "print()\n",
    "print(clf.best_params_)\n",
    "print()\n",
    "print(\"Grid scores on development set:\")\n",
    "print()\n",
    "means = clf.cv_results_['mean_test_score']\n",
    "stds = clf.cv_results_['std_test_score']\n",
    "\n",
    "\n",
    "# for mean, std, params in zip(means, stds, clf.cv_results_['params']):\n",
    "#     print(\"%0.3f (+/-%0.03f) for %r\"\n",
    "#             % (mean, std * 2, params))\n",
    "    \n",
    "# print()\n",
    "#############################################\n",
    "from mpl_toolkits.mplot3d import Axes3D\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib import cm\n",
    "from matplotlib.ticker import LinearLocator, FormatStrFormatter\n",
    "import numpy as np\n",
    " \n",
    " \n",
    "fig = plt.figure()\n",
    "ax = fig.gca(projection='3d')\n",
    " \n",
    "X1 = np.array(tuned_parameters[0]['C'])\n",
    "Y1 = np.array(tuned_parameters[0]['gamma'])\n",
    "\n",
    "X1, Y1 = np.meshgrid(X1, Y1)\n",
    "Z1 = np.array(means)#[::-1]\n",
    "Z1 = np.reshape(Z1, X1.shape)\n",
    "\n",
    "\n",
    "# Plot the surface.\n",
    "surf = ax.plot_surface(X1, Y1, Z1, cmap=cm.coolwarm,\n",
    "                       linewidth=0, antialiased=False)\n",
    " \n",
    "# Customize the z axis.\n",
    "ax.set_zlim(-1.01, 1.01)\n",
    "ax.zaxis.set_major_locator(LinearLocator(10))\n",
    "ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))\n",
    " \n",
    "# Add a color bar which maps values to colors.\n",
    "fig.colorbar(surf, shrink=0.5, aspect=5)\n",
    " \n",
    "plt.show()\n",
    "#############################################\n",
    "print(\"Detailed classification report:\")\n",
    "print()\n",
    "print(\"The model is trained on the full development set.\")\n",
    "print(\"The scores are computed on the full evaluation set.\")\n",
    "print()\n",
    "y_true, y_pred = y_test, clf.predict(X_test)\n",
    "print(classification_report(y_true, y_pred))\n",
    "print()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 后续调参工作\n",
    "##### 1.这次调的超参很可能只是局部最优解，需要进一步扩大范围，及减小步长，进一步提高准确率\n",
    "##### 2.其它核函数及核函数对应超参，进一步提高准确率\n",
    "##### 3.简化模型，提高性能，提高泛化能力\n",
    "###### 3.1 LDA根据标签对特征降维\n",
    "3.2.1 特征选择：利用末尾淘汰制，一个一个的减小权重最小的特征，直到减少一个特征后指标有明显下降，即手肘法\n",
    "\n",
    "3.2.2 中心化后对特征PCA降维"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 谢谢观看！"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
